package main

import (
	"fmt"
	"math"
)

type Circle struct {
	radius float64
}

func main() {
	a := func1MaxNum(1, 2)
	fmt.Println(a)
	//值传递，多值返回
	b := "x"
	c := "y"
	b, c = swap(b, c)
	fmt.Printf("原值为x,y 交换后为%s,%s\n", b, c)
	//引用传递
	var d int = 1
	var e int = 2
	swap2(&d, &e)
	fmt.Printf("原值为1,2 交换后为%d,%d\n", d, e)
	//函数作为参数
	getSquareRoot := func(x float64) float64 {
		return math.Sqrt(x)

	}
	fmt.Println(getSquareRoot(9))

	//闭包，返回函数
	nextNumber := adder()
	fmt.Println(nextNumber())
	fmt.Println(nextNumber())
	nextNumber2 := adder()
	fmt.Println(nextNumber2())
	fmt.Println(nextNumber2())
	fmt.Println(nextNumber2())
	fmt.Println(nextNumber())

	//结构体的函数方法
	var c1 Circle
	c1.radius = 10.00
	fmt.Println("圆的面积=", c1.getArea())

}
func func1MaxNum(a, b int) int {
	if a > b {
		return a
	} else {
		return b
	}
}

/**
值传递交换，返回多个值
*/
func swap(a, b string) (string, string) {
	return b, a
}

/**
引用传递
*/
func swap2(a *int, b *int) {
	temp := *a
	*a = *b
	*b = temp

}

/**
闭包，函数里返回函数，函数里数据自增
*/
func adder() func() int {
	i := 0
	return func() int {
		i += 1
		return i
	}
}

/**
某个结构体的方法
*/
func (c Circle) getArea() float64 {
	return 3.14 * c.radius * c.radius

}
